Security aware operating systems need the ability to authenticate users. User authentication can be done in several ways. In its simplest form, user authentication is based on some combination of a user authenticator and a user identity. The user authenticator is derived from something unique that the user knows such as a password. More recent, and sophisticated, multi-factor authentication mechanisms also rely on something the user has—usually a token represented by some form of hardware—something the user is—a biometric authenticator such as a fingerprint or a retinal pattern, or some combination of all three. However, even in such multi-factor authentication systems, passwords are used for particular operations and therefore need to be managed and stored. The storage of passwords, or some representation derived from passwords, is a difficult problem.
Various techniques have been used to store passwords, but all have certain flaws rendering them unsuitable as the attacks against stored passwords become more sophisticated and the computer hardware available to an attacker becomes faster. For instance, one of the simplest schemes for storing a password is to simply store the password itself. However, in such a scenario, an attacker that manages to obtain the list of passwords can immediately use all the passwords. To combat such unhindered access, systems attempted to obfuscate passwords with simple mathematical operations, such as those based on Rot-13 or Base-64. Alternatively, a fixed key was used to encrypt a password. However, these techniques are easily reversible, since anyone with access to the stored passwords and knowledge of the algorithm or the fixed key could easily determine the clear-text password.
More sophisticated one-way cryptographic functions (OWF) were introduced to address the weaknesses discussed above. An OWF uses a cryptographic algorithm to obfuscate and store passwords. The most common type of attacks on stored passwords is a brute force or some type of dictionary/brute force hybrid attack in which an attacker must guess the password, encode it using the proper OWF and compare it to the stored value. If the two match, the right password was found. Unfortunately, certain OWF password encryption algorithms are not cryptographically secure today, while others, although considered cryptographically secure today, will likely not be secure in the near future, particularly in the face of distributed concerted attack efforts.
Conventional OWF password obfuscation techniques are substantially limited in their ability to securely store a password for other reasons as well. The most important problem is that the stored authenticator (the password hash) is the same value used to authenticate the user. In other words, the only secret is the authenticator—the password representation or hash—not the password it represents. For purposes of discussion, the term “hash” is used to denote a stored password representation, whether the password has been obfuscated or not.
On-wire password authentication algorithms can be sniffed and cracked. An authentication sequence on the network can be captured and used to determine, or crack the password. Although, such an attack is difficult to perpetrate as the captured information has undergone one additional cryptographic transformation over the password representation itself, it is possible to use a cryptographically secure storage algorithm but leave the on-wire algorithm vulnerable to brute forcing of the stored value, which can then be used instead of a plaintext passwords as described in 0005 above.